package com.wjp.banquet.common.util;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Author 王君平
 * @Date 2020/12/18 13:57
 * @Description
 */
public class StringUtil {

    /**
     * 首字母转小写
     * @param s
     * @return
     */
    public static String firstLetterToLowerCase(String s){
        if(isEmpty(s) || Character.isLowerCase(s.charAt(0))){
            return s;
        }
        return (new StringBuilder()).append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
    }

    /**
     * 首字母转大写
     * @param s
     * @return
     */
    public static String firstOLetterToUpperCase(String s){
        if(isEmpty(s) || Character.isUpperCase(s.charAt(0))){
            return s;
        }
        return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
    }

    /**
     * 是否为空
     * @param s
     * @return
     */
    public static boolean isEmpty(String s){
        return s == null || s.trim().isEmpty();
    }

    /**
     * 是否不为空
     * @param s
     * @return
     */
    public static boolean isNotEmpty(String s){
        return !isEmpty(s);
    }

    /**
     * 从字符串中提取数字
     *
     * @param str 含有数字的字符串
     * @param untilCountStop 提取到第几个数字字符串的时候停止   = 0  代表： 所有
     * @return
     * 123a456bc789xx   -1   =>   123,456,789
     */
    public static List<String> extractNum(String str, int untilCountStop){
        if(StringUtil.isEmpty(str)){
            return Collections.emptyList();
        }
        List<String> result = new ArrayList<>();
        String str_ = str.trim();
        StringBuilder numStr = new StringBuilder();

        for(int i = 0;i < str_.length();i++){
            if(str_.charAt(i) >= 48 && str_.charAt(i) <= 57){
                numStr.append(str_.charAt(i));
            }else{
                if(numStr.length() <= 0){
                    continue;
                }
                result.add(numStr.toString());
                numStr = new StringBuilder();
                if(untilCountStop > 0 && result.size() >= untilCountStop){
                    return result;
                }
            }
        }
        if(numStr.length() > 0 && ((untilCountStop > 0 && result.size() < untilCountStop) || untilCountStop == 0) ){//最后一个也弄上
            result.add(numStr.toString());
        }
        return result;
    }

    /**
     * 从字符串中提取数字
     * @param str 字符串
     * @return 数字字符串
     */
    public static String extractNum(String str) {
        if(StringUtil.isEmpty(str)){
            return "";
        }
        StringBuilder sb = new StringBuilder();
        for (char c : str.toCharArray()) {
            if(c >= 48 && c <= 57){
                sb.append(c);
            }
        }
        return sb.toString();
    }

    /**
     * 找出两个字符串中最大的相同子字符串 (有点不准，但是基本可用)
     *
     * @param s1
     * @param s2
     * @return
     */
    public static String stringMax(String s1, String s2) {
        // 记录相同子字符串
        String sameString = null;
        // 比较两个字条串的长度，这里是设置S1的长度大于S2的长度
        if (s1.length() < s2.length()) {
            // 如果s2的长度大，那么就将两个字符串进行替换
            String temp = s1;
            s1 = s2;
            s2 = temp;
        }
        // 如果s2就被包含在s1中，那么这两个字符串最大的子串就是s2
        boolean isContains = s1.contains(s2);

        if (isContains) {
            return s2;
        } else {
            boolean b1 = false;
            // 如果s2不是两个字符串最大的子类，那么再进行循环查找
            for (int i = 0; i < s2.length(); i++) {
                for (int j = 0; j <= i; j++) {
                    // 获取每次进行比较的子字条串
                    String str = s2.substring(j, s2.length() - i + j);
                    if (s1.contains(str)) {
                        sameString = str;
                        b1 = true;
                        break;
                    }

                }
                // 如果比较到s2中最小的为2的时候还没有相同的字符串，我们就默认没相同的子字符串
                if (s2.substring(0, s2.length() - i).length() == 2) {
                    b1 = true;
                    break;

                }
                if (b1 == true)
                    break;
            }
        }
        return sameString;
    }

    public static String subMysqlTextString(String msg){
        //mysql中text 最大长度为65,535  超过这个长度的截取  因为有中文，中文字符一个字符2个或者三个字符长度  打个0.7的折扣
        if (msg != null && msg.length() > 65535) {
            msg = msg.substring(0, (int) (65535 * 0.7));
        }
        return msg;
    }

}
